import java.util.Scanner;

public class JavaMethod {
    public static void swap(int[] arr) {
        int tmp=arr[0];
        arr[0]=arr[1];
        arr[1]=tmp;
    }
    public static void main1(String[] args) {
        int[] arr={0,1};
        swap(arr);
        System.out.println("arr[0]="+arr[0]+" arr[1]="+arr[1]);
    }


    public static double sum() {
        double sum=0;
        int j=1;
        for (int i = 1; i <=100 ; i++) {
            sum+=(double) 1/i*j;
            j=-j;
        }
        return sum;
    }

    public static void print(int num) {
        while(num!=0) {
            System.out.print(num%10);
            num/=10;
        }
    }

    public static void login(String key) {
        Scanner scan=new Scanner(System.in);
        int count=2;
        System.out.print("请输入密码:");
        String password=scan.nextLine();
        while(count!=0) {
            if(password.equals(key)) {
                System.out.println("密码正确");
                break;
            }else {
                System.out.print("密码错误，重新输入:");
                password=scan.nextLine();
                count--;
            }
        }
        if(count==0) {
            System.out.println("输入次数为0，需要核实本人信息");
        }
    }

    public static void math() {
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=i;j++) {
                System.out.print("i*j="+i*j);
                System.out.print("\t");
            }
            System.out.println();
        }
    }

    public static int max2(int a,int b) {
        return a > b? a : b;
    }
    public static int max3(int a,int b,int c) {
        return max2(a,b)<c?c:max2(a,b);
    }

    public static int fib(int n) {
        if(n==1||n==2) {
            return 1;
        }
        int f1=1;
        int f2=1;
        int f3=0;
        for(int i=3;i<=n;i++) {
            f3=f2+f1;
            f1=f2;
            f2=f3;
        }
        return f3;
     }


    public static int add(int a,int b) {
        return a+b;
    }
    public static int add(int a,int b,int c) {
        return a+b+c;
    }
    public static double add(int a,int b,double c) {
        return a+b+c;
    }
    //1.计算1/1-1/2+1/3-1/4+1/5-.....+1/99-1/100
    //2.输出一个整数的每一位  如:123的每一位是3 2 1
    //3.编写代码模拟三次密码输入的场景.最多能输入三次密码，密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错，则提示退出程序
    //4.n*n的乘法口诀表
    //5.max2:求两个数的最大值  max3:求三个数的最大值  要求:在max3中调用max2，实现三个数的最大值计算
    //6.求斐波那契数列的第n项
    //7.使用重载求两个数或者三个数的和(特点:1.方法名称相同2.参数类别不同3.返回值没有要求)
    public static void main2(String[] args) {
        System.out.println(sum());
        print(123);
        System.out.println();
        login("123");
        math();
        System.out.println(max3(1, 6, 7));
        System.out.println(fib(40));
        System.out.println(add(1, 2));
        System.out.println(add(1, 2, 3));
        System.out.println(add(1, 2, 3.5));
    }






    public static int fac(int n) {
            if(n==1) {
                return 1;
            }
            return n*fac(n-1);
    }

    public static void printNum(int num) {
        if(num%10==0) {
            return;
        }
        printNum(num/10);
        System.out.print(num%10);
        System.out.print(" ");
    }

    public static int  Sum(int n) {
        if(n/10==0) {
            return n;
        }
        return Sum(n/10)+n%10;
    }

    public static int Fib(int n) {
        if(n==1||n==2) {
            return 1;
        }
        return Fib(n-1)+Fib(n-2);
    }


    public static void hanota(int n,char pos1,char pos2,char pos3) {     //初始时:pos是初始位置pos2是中转位置pos3是目标位置
        if(n==1) {
            move(pos1,pos3);
            return;
        }
        hanota(n-1,pos1,pos3,pos2);   //先把n-1个盘子从pos1移到到pos2上
        move(pos1,pos3);
        hanota(n-1,pos2,pos1,pos3);   //再把n-1个盘子从pos2移动到pos3上
    }
    public static void move(char pos1,char pos2) {
        System.out.print(pos1+"->"+pos2);
        System.out.print(" ");
    }
    //递归
    public static void main(String[] args) {
        System.out.println(fac(5));
        //按顺序打印1 2 3 4的每一位
        printNum(1234);
        System.out.println();
        //输入一个非负整数，返回组成他的数字之和
        System.out.println(Sum(1629));
        //求斐波那契数列(fibnacio)第n项
        System.out.println(Fib(10));
        //汉诺塔
        //思路:1个盘子  A->C  2^1-1
            //2个盘子  A->B  A->C B->C    2^2-1
            //3个盘子  A->B  A->C C->B  A->C B->A B->C A->C  2^3-1
            //n个盘子  先把n-1个借助pos3移到pos2上，pos1那一个的放到pos3上，最后再把n-1个盘子借助pos1从pos2移到pos3
        hanota(3,'A','B','C');
    }
}